
/*
 * (a)  (C) 1990 by Adobe Systems Incorporated. All rights reserved.
 *
 * (b)  If this Sample Code is distributed as part of the Display PostScript
 *	System Software Development Kit from Adobe Systems Incorporated,
 *	then this copy is designated as Development Software and its use is
 *	subject to the terms of the License Agreement attached to such Kit.
 *
 * (c)  If this Sample Code is distributed independently, then the following
 *	terms apply:
 *
 * (d)  This file may be freely copied and redistributed as long as:
 *	1) Parts (a), (d), (e) and (f) continue to be included in the file,
 *	2) If the file has been modified in any way, a notice of such
 *      modification is conspicuously indicated.
 *
 * (e)  PostScript, Display PostScript, and Adobe are registered trademarks of
 *	Adobe Systems Incorporated.
 * 
 * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
 *	CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
 *	AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
 *	ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
 *	OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
 *	WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
 *	WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
 *	DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, 
 *	FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
 *	OF THIRD PARTY RIGHTS.
 */

/*
 *	ResourcePanel.m
 *
 *	This panel displays the unavailable resources.
 *
 *	Version:	2.0
 *	Author:	Ken Fromm
 *	History:
 *			03-07-91		Added this comment.
 */

#import "ResourcePanel.h"

#import <appkit/Application.h>
#import <appkit/NXBrowser.h>
#import <appkit/NXBrowserCell.h>
#import <appkit/Matrix.h>

#import <objc/List.h>
#import <strings.h>

@implementation ResourcePanel

- setTypeBrowser:anObject
{
	typeBrowser = anObject;

	[typeBrowser  useScrollBars:NO];
	[typeBrowser  setDelegate:self];
	[typeBrowser  setTarget:self];
	[typeBrowser  setAction:@selector(browserAction:)];

	return self;
}

- setFileBrowser:anObject
{
	fileBrowser = anObject;

	[fileBrowser  setDelegate:self];

	return self;
}

- browserAction:sender
{
	[fileBrowser  reloadColumn:0];

	return self;
}

- (int) runModalWithList:(ResourceList *) aList
{
	return [self  runModalWithList:aList  andName:NULL];
}

- (int) runModalWithList:(ResourceList *) aList  andName:(NXAtom) name
{
	int		result;

	const char	*filename;

	list = aList;

	if (name)
	{
		filename = strrchr(name, '/');
		if (filename)
			filename++;
		else
			filename = name;
		[nameField  setStringValue:filename];
	}
	else
		[nameField  setStringValue:"<filename unavailable>"];
		
	[typeBrowser  reloadColumn:0];
	[[typeBrowser  matrixInColumn:0]  selectCellAt:0 :0];
	[fileBrowser  reloadColumn:0];

	[self  makeKeyAndOrderFront:self];
	result = [NXApp runModalFor:self];
	[self  orderOut:self];
	list = NULL;

	return result;
}

- endModal:sender
{
	[NXApp  stopModal:[sender  selectedTag]];

	return self;
}

/*
*	NXBrowser Delegate method.
*/
- (int) browser:sender  fillMatrix:matrix  inColumn:(int) column
{
	id			cell;

	int			i, j, row, rows, count;

	const char	*type;

	rows = 0;
	if (list)
	{
		if (sender == typeBrowser && column == 0)
		{
			for (i = 0; i < RES_NUMTYPES; i++)
			{
				count = [list->types[i]  count];
				if (count)
				{
					type = GetTypeComment(i);
					[matrix  addRow];
					cell = [matrix  cellAt:rows++ :0];
					[cell  setStringValueNoCopy:type];
					[[cell  setLeaf:YES]  setLoaded:YES];
				}
			}
		}
		else if (sender == fileBrowser && column == 0)
		{
			count = 0;
			row = [[typeBrowser  matrixInColumn:0]  selectedRow];
			for (i = 0; i < RES_NUMTYPES; i++)
			{
				if (list->types[i])
				{
					if (count == row)
						break;
					count++;
				}
			}

			if (i < RES_NUMTYPES)
			{
				count = [list->types[i]  count];
				for (j = 0; j < count; j++)
				{
					[matrix  addRow];
					cell = [matrix  cellAt:rows++ :0];
					[cell  setStringValueNoCopy:(const char *) [list->types[i]  objectAt:j]];
					[[[cell  setLeaf:YES]  setLoaded:YES]  setSelectable:NO];
				}
			}
		}
	}
	 
	return rows;
}

@end
